package com.api.gbhg.lbj.tool;


import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

/**
 * excel表格查找数据工具
 */
public class ExcelTools {

    /**
     * 查找包含指定名称单元格的行号
     *
     * @param filePath  文件路径
     * @param sheetName sheet名称
     * @param clmIndex  列id
     * @param keyWord   关键字
     * @param offset    偏移量
     */
    public static List<Object> findColumnRowId(String filePath, String sheetName, Integer clmIndex, String keyWord, Integer offset) {
        try {
            return findColumnRowId(new FileInputStream(new File(filePath)), sheetName, clmIndex, keyWord, offset);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 找包含指定名称单元格的行号
     *
     * @param inputStream
     * @param sheetName
     * @param clmIndex
     * @param keyWord
     * @param offset      偏移量
     * @return
     */
    public static List<Object> findColumnRowId(InputStream inputStream, String sheetName, Integer clmIndex, String keyWord, Integer offset) {
        ExcelReader reader = ExcelUtil.getReader(inputStream, sheetName);
        int cnt = reader.getRowCount();
        for (int i = 0; i < cnt; i++) {
            int clcnt = reader.getColumnCount(i);
            if (clmIndex == null) {
                for (int t = 0; t < clcnt; t++) {
                    Cell cell=reader.getCell(t,i);
                    if (cell==null){
                        continue;
                    }
                    cell.setCellType(CellType.STRING);
                    if(containsKeyword(cell,keyWord)){
                        return reader.readRow(i + offset);
                    }
                }
            }else {
                Cell cell=reader.getCell(clmIndex,i);
                cell.setCellType(CellType.STRING);
                if(containsKeyword(cell,keyWord)){
                    return reader.readRow(i + offset);
                }
            }
        }
        return null;
    }


    /**
     * 查找包含指定名称单元格的行号
     *
     * @param filePath  文件路径
     * @param sheetindex 第几个sheet
     * @param clmIndex  列id
     * @param keyWord   关键字
     * @param offset    偏移量
     */
    public static List<Object> findColumnRowId(String filePath, int sheetindex, Integer clmIndex, String keyWord, Integer offset) {
        try {
            return findColumnRowId(new FileInputStream(new File(filePath)), sheetindex, clmIndex, keyWord, offset);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 找包含指定名称单元格的行号
     *
     * @param inputStream
     * @param sheetindex
     * @param clmIndex
     * @param keyWord
     * @param offset      偏移量
     * @return
     */
    public static List<Object> findColumnRowId(InputStream inputStream, int sheetindex, Integer clmIndex, String keyWord, Integer offset) {
        ExcelReader reader = ExcelUtil.getReader(inputStream, sheetindex);
        int cnt = reader.getRowCount();
        for (int i = 0; i < cnt; i++) {
            int clcnt = reader.getColumnCount(i);
            if (clmIndex == null) {
                for (int t = 0; t < clcnt; t++) {
                    Cell cell=reader.getCell(t,i);
                    if (cell==null){
                        continue;
                    }
                    cell.setCellType(CellType.STRING);
                    if(containsKeyword(cell,keyWord)){
                        return reader.readRow(i + offset);
                    }
                }
            }else {
                Cell cell=reader.getCell(clmIndex,i);
                cell.setCellType(CellType.STRING);
                if(containsKeyword(cell,keyWord)){
                    return reader.readRow(i + offset);
                }
            }
        }
        return null;
    }

    /**
     * 判断是否包含固定值
     * @param cell
     * @param keyWord
     * @return
     */
    private static boolean containsKeyword(Cell cell, String keyWord) {
        if (cell != null) {
            String cellValue = cell.getStringCellValue();
            return cellValue.indexOf(keyWord) >= 0;
        }
        return false;
    }
}
